home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 August (Alt) / CHIP 2005-08.1.iso / program / guvenlik / syslinux-3.07.exe / dos / __udivmoddi4.c < prev    next >
Encoding:
C/C++ Source or Header  |  2004-12-18  |  509 b   |  32 lines

  1. #include <stdint.h>
  2.  
  3. uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t *rem_p)
  4. {
  5.   uint64_t quot = 0, qbit = 1;
  6.   
  7.   if ( den == 0 ) {
  8.     asm volatile("int $0");
  9.     return 0;            /* If trap returns... */
  10.   }
  11.  
  12.   /* Left-justify denominator and count shift */
  13.   while ( (int64_t)den >= 0 ) {
  14.     den <<= 1;
  15.     qbit <<= 1;
  16.   }
  17.  
  18.   while ( qbit ) {
  19.     if ( den <= num ) {
  20.       num -= den;
  21.       quot += qbit;
  22.     }
  23.     den >>= 1;
  24.     qbit >>= 1;
  25.   }
  26.  
  27.   if ( rem_p )
  28.     *rem_p = num;
  29.  
  30.   return quot;
  31. }
  32.